package com.example.study2;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class ArrayListTraversal {
    public static void main(String[] args) {
        // 创建测试数据
        ArrayList<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 5; i++) {
            numbers.add(i * 10);
        }
        System.out.println("原始列表: " + numbers);
        // 原始列表: [10, 20, 30, 40, 50]

        // 1. 普通for循环遍历 - 最灵活的遍历方式
        System.out.print("遍历结果: ");
        for (int i = 0; i < numbers.size(); i++) {
            System.out.print(numbers.get(i) + " ");
            // 可以在此处使用索引i进行其他操作
        }
        System.out.println();
        /*
        === 普通for循环遍历 ===
        遍历结果: 10 20 30 40 50
        */

        // 2. 增强for循环 (for-each) - 语法最简洁
        System.out.print("遍历结果: ");
        for (Integer num : numbers) {
            System.out.print(num + " ");
            // 注意：不能在遍历中直接调用numbers.remove(num)等修改操作
            // 否则会抛出ConcurrentModificationException
        }
        System.out.println();

        // 3. Iterator迭代器遍历 - 安全的删除方式
        System.out.print("遍历结果: ");
        Iterator<Integer> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            Integer num = iterator.next();
            System.out.print(num + " ");
            // 可以安全调用iterator.remove()删除当前元素
        }
        System.out.println();

        // 4. ListIterator列表迭代器 - 功能最强大
        ListIterator<Integer> listIterator = numbers.listIterator();
        System.out.print("正向遍历: ");
        while (listIterator.hasNext()) {
            Integer num = listIterator.next();
            System.out.print(num + " ");
        }
        System.out.println();


        System.out.print("反向遍历: ");
        while (listIterator.hasPrevious()) {
            Integer num = listIterator.previous();
            System.out.print(num + " ");
        }
        System.out.println();
        // 反向遍历: 50 40 30 20 10
    }
}